package com.ch_linghu.fanfoudroid.db;

import android.database.Cursor;
import android.provider.BaseColumns;
import android.util.Log;

import com.ch_linghu.fanfoudroid.data.User;

public final class UserInfoTable implements BaseColumns {

	public static final String TAG = "UserInfoTable";
	
    public static final String TABLE_NAME = "userinfo";

	public static final String FIELD_USER_NAME = "name";
    public static final String FIELD_USER_SCREEN_NAME = "screen_name";
	public static final String FIELD_LOCALTION = "location";
	public static final String FIELD_DESCRIPTION = "description";
    public static final String FIELD_PROFILE_IMAGE_URL = "profile_image_url";
	public static final String FIELD_URL = "url";
	public static final String FIELD_PROTECTED = "protected";
	public static final String FIELD_FOLLOWERS_COUNT = "followers_count";
	public static final String FIELD_FRIENDS_COUNT = "friends_count";
	public static final String FIELD_FAVORITES_COUNT = "favourites_count";
	public static final String FIELD_STATUSES_COUNT = "statuses_count";
	public static final String FIELD_LAST_STATUS = "last_status";
    public static final String FIELD_CREATED_AT = "created_at";
	public static final String FIELD_FOLLOWING = "following";
	
	public static final String FIELD_FOLLOWER_IDS="follower_ids";
	
    public static final String[] TABLE_COLUMNS = new String[] { _ID,
    	FIELD_USER_NAME, FIELD_USER_SCREEN_NAME,
    	FIELD_LOCALTION, FIELD_DESCRIPTION, 
    	FIELD_PROFILE_IMAGE_URL, FIELD_URL, FIELD_PROTECTED,
    	FIELD_FOLLOWERS_COUNT, FIELD_FRIENDS_COUNT, 
    	FIELD_FAVORITES_COUNT, FIELD_STATUSES_COUNT, 
    	FIELD_LAST_STATUS, FIELD_CREATED_AT, FIELD_FOLLOWING};
    
    public static final String CREATE_TABLE = "create table "
        + TABLE_NAME + " (" 
        + _ID + " text primary key on conflict replace, "
    	+ FIELD_USER_NAME + " text not null, "
        + FIELD_USER_SCREEN_NAME + " text, "
    	+ FIELD_LOCALTION + " text, "
    	+ FIELD_DESCRIPTION + " text, "
        + FIELD_PROFILE_IMAGE_URL + " text, "
    	+ FIELD_URL + " text, "
    	+ FIELD_PROTECTED + " boolean, "
    	+ FIELD_FOLLOWERS_COUNT + " integer, "
    	+ FIELD_FRIENDS_COUNT + " integer, "
    	+ FIELD_FAVORITES_COUNT + " integer, "
    	+ FIELD_STATUSES_COUNT + " integer, "
    	+ FIELD_LAST_STATUS + " text, "
        + FIELD_CREATED_AT + " date, "
    	+ FIELD_FOLLOWING + " boolean "
    	//+FIELD_FOLLOWER_IDS+" text"
    	+ ")";
    
	 /**
	 * TODO: 将游标解析为一条用户信息
	 * 
	 * @param cursor 该方法不会关闭游标
	 * @return 成功返回User类型的单条数据, 失败返回null
	 */
	public static User parseCursor(Cursor cursor) {
	    
	    if (null == cursor || 0 == cursor.getCount()) {
	        Log.w(TAG, "Cann't parse Cursor, bacause cursor is null or empty.");
	        return null;
	    }
	    
	    User user = new User();
	    
		user.id = cursor.getString(cursor.getColumnIndex(_ID));
		user.name = cursor.getString(cursor.getColumnIndex(FIELD_USER_NAME));
	    user.screenName = cursor.getString(cursor.getColumnIndex(FIELD_USER_SCREEN_NAME));
		user.location = cursor.getString(cursor.getColumnIndex(FIELD_LOCALTION));
		user.description = cursor.getString(cursor.getColumnIndex(FIELD_DESCRIPTION));
	    user.profileImageUrl = cursor.getString(cursor.getColumnIndex(FIELD_PROFILE_IMAGE_URL));
		user.url = cursor.getString(cursor.getColumnIndex(FIELD_URL));
		user.isProtected = (0 == cursor.getInt(cursor.getColumnIndex(FIELD_PROTECTED))) ? false : true;
		user.followersCount = cursor.getInt(cursor.getColumnIndex(FIELD_FOLLOWERS_COUNT));
		user.lastStatus = cursor.getString(cursor.getColumnIndex(FIELD_LAST_STATUS));
	
		user.friendsCount = cursor.getInt(cursor.getColumnIndex(FIELD_FRIENDS_COUNT));
		user.favoritesCount = cursor.getInt(cursor.getColumnIndex(FIELD_FAVORITES_COUNT));
		user.statusesCount = cursor.getInt(cursor.getColumnIndex(FIELD_STATUSES_COUNT));
		user.isFollowing = (0 == cursor.getInt(cursor.getColumnIndex(FIELD_FOLLOWING))) ? false : true;
	//TODO:报空指针异常,待查
//	    try {
//	        user.createdAt = StatusDatabase.DB_DATE_FORMATTER.parse(cursor.getString(cursor.getColumnIndex(MessageTable.FIELD_CREATED_AT)));
//	    } catch (ParseException e) {
//	        Log.w(TAG, "Invalid created at data.");
//	    }
	    
	    return user;
	}
	
}